home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Utilities / MUIFuzzyShadow / MUIFuzzyShadows.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2001-05-26  |  28.5 KB  |  1,091 lines

  1. /*
  2. ** -----------------------------------------------
  3. **  $VER: MUIFuzzyShadows.rexx V1.03 (24 May 2001)
  4. **  ©2000-2001 Michael Merkel
  5. ** -----------------------------------------------
  6. */
  7.  
  8. SIGNAL ON SYNTAX
  9. SIGNAL ON HALT
  10. SIGNAL ON BREAK_C
  11. OPTIONS RESULTS
  12.  
  13. /*
  14. TRACE ALL
  15. */
  16.  
  17. /*
  18. ** first of all add the needed libraries
  19. */
  20.  
  21. IF ~show("L","rmh.library")
  22. THEN IF ~AddLib("rmh.library", 0, -30) THEN EXIT
  23.  
  24. IF ~show("L","rxasl.library")
  25. THEN IF ~AddLib("rxasl.library", 0, -30) THEN EXIT
  26.  
  27. IF ~show("L","rxmui.library")
  28. THEN IF ~AddLib("rxmui.library", 0, -30) THEN EXIT
  29.  
  30. /*
  31. ** DEBUG MODE!!!
  32. */
  33.  
  34. Call rxMuiOpt("DEBUGMODE SHOWERR")
  35.  
  36. /*
  37. ** Make sure rexx support is opened
  38. */
  39. IF ~SHOW('L','rexxsupport.library') THEN
  40.    CALL ADDLIB('rexxsupport.library',0,-30)
  41. IF ~SHOW('L','softlogik:libs/slarexxsupport.library') THEN
  42.    CALL ADDLIB('softlogik:libs/slarexxsupport.library',0,-30)
  43.  
  44. IF ~SHOW('P','PAGESTREAM')
  45. THEN DO
  46.    CALL ShowRequester("Start PageStream first!", "Of course...")
  47.    Exit
  48. END
  49. ADDRESS 'PAGESTREAM'
  50.  
  51. pgsInstallDir = 'PageStream:Scripts/MUIFuzzyShadows'
  52. pgsName       = 'MUIFuzzyShadows'
  53. pgsVersion    = 'V1.03'
  54. pgsAuthor     = 'Michael Merkel'
  55. pgsCopy       = '©2000-01 Michael Merkel'
  56. pgsLVer       = '1.00'
  57. pgsDate       = '05/24/2001'
  58. pgsPic        = pgsInstallDir || '/MUIFuzzyShadows.pic'
  59. standardPrefs = pgsInstallDir || '/MUIFuzzyShadows.prefs'
  60.  
  61. PARSE ARG doItQuick prefsFile
  62.  
  63. fileName = STRIP(filename)
  64. fileName = STRIP(filename, 'B', "'")
  65. fileName = STRIP(filename, 'B', '"')
  66.  
  67. /*
  68. ** default settings
  69. */
  70.  
  71. Call SetDefaultPrefs
  72.  
  73. /*
  74. ** do some checks before
  75. */
  76.  
  77. Call CheckRoutines
  78.  
  79. /*
  80. ** load prefs
  81. */
  82.  
  83. Call LoadPrefs(standardPrefs)
  84.  
  85. /*
  86. ** if not in quick mode do the setting requester
  87. ** save the prefs afterwards and quit or go on
  88. */
  89.  
  90. IF (Upper(DoItQuick) ~= 'QUICK')
  91. THEN DO
  92.     Call BuildGUI
  93.     muiBusyWinOpen = FALSE
  94.  
  95.     /*
  96.     ** open the window and check if it is
  97.     */
  98.  
  99.     Call Set("muiWin", "OPEN", 1)
  100.     Call GetAttr("muiWin", "OPEN", "o")
  101.     IF (o = 0)
  102.     THEN DO
  103.         Say "can't open window"
  104.         EXIT
  105.     END
  106.     Call PrefsWindowSet()
  107.     Call EventLoop()
  108.     Call PrefsWindowGet()
  109.     Call Set("muiWin", "OPEN", 0)
  110.     Call DoFuzzyShadows()
  111.     Call CleanUp()
  112. END
  113. ELSE DO
  114.     Call BuildGUI
  115.     Call DoFuzzyShadows()
  116.     Call CleanUp()
  117. END
  118.  
  119. Exit
  120.  
  121. /* /// DoFuzzyShadows()
  122. */
  123. DoFuzzyShadows:
  124.     /*
  125.     ** Draw the fuzzy shadows
  126.     ** ----------------------
  127.     */
  128.  
  129.     offX = p2d(prefs._offX, measure)
  130.     offY = p2d(prefs._offY, measure)
  131.  
  132.     startStroke = p2d(prefs._startStroke, measure)
  133.     endStroke   = p2d(prefs._endStroke, measure)
  134.  
  135.     /*
  136.     ** now run over all selected objects and do the trick
  137.     */
  138.  
  139.     busyReq = BusyOpen( "Doing Fuzzy Shadows...", idCount-1, prefs.num-1 )
  140.  
  141.     IF (prefs.hideWin = 1)
  142.     THEN 'HIDEWINDOW'
  143.  
  144.     DO objNr = 0 TO (idCount - 1)
  145.  
  146.         /*
  147.         ** add shadow to object
  148.         */
  149.  
  150.         'SELECTOBJECT NONE'
  151.         Call MakeShadow(allObjs.objNr)
  152.     END
  153.  
  154.     Call CleanUp(busyReq)
  155. Exit
  156. /* /// */
  157. /* /// MakeShadow(original)
  158. */
  159. MakeShadow:
  160.     /*
  161.     ** Add fuzzy shadows to an object with given id
  162.     ** --------------------------------------------
  163.     */
  164.  
  165.     PARSE ARG original
  166.  
  167.     'GETOBJECT TYPE objType OBJECTID '|| original
  168.  
  169.     IF (objType = 11) | (objType = 14)
  170.     THEN mode = 'TEXT'
  171.     ELSE mode = 'OBJECT'
  172.  
  173.     'REFRESH OFF'
  174.  
  175.     IF (objType = 12) & (prefs.doPicAsBox = 1)
  176.     THEN Call CopyAsBox(original)
  177.     ELSE DO
  178.         'DUPLICATE OFFSET 0 0 OBJECTID '|| original
  179.     END
  180.     'GETOBJECT'
  181.      newOriginal = RESULT
  182.  
  183.     'TRANSFORM 0 OFFSET "'|| offX||measure ||'" "'|| offY||measure||'" OBJECTID '|| newOriginal
  184.  
  185.     pcolor = prefs.color
  186.     IF (mode = 'TEXT')
  187.     THEN DO
  188.         'SELECTTEXT INOBJECT '|| newOriginal
  189.         'SELECTTEXT ALL'
  190.  
  191.         'BEGINCOMMANDCAPTURE'
  192.             'STROKED OFF TEXT'
  193.             'FILLED ON TEXT'
  194.             'SETFILL BASIC FILL'
  195.             'SETFPATTERN NONE FILL'
  196.             'SETCOLORCOUNT 1 FILL TEXT'
  197.             'SETCOLORSTYLE "'|| colorPGS.pcolor ||'" COLORNUMBER 0 FILL TEXT'
  198.             'SETCOLORTINT '|| prefs.startTint ||'% COLORNUMBER 0 FILL TEXT'
  199.         'ENDCOMMANDCAPTURE'
  200.     END
  201.     ELSE DO
  202.         'STROKED OFF OBJECT OBJECTID '|| newOriginal
  203.         'FILLED ON OBJECT OBJECTID '|| newOriginal
  204.  
  205.         'SETFILL BASIC FILL OBJECT OBJECTID '|| newOriginal
  206.         'SETFPATTERN NONE FILL OBJECT OBJECTID '|| newOriginal
  207.         'SETCOLORCOUNT 1 FILL OBJECT OBJECTID '|| newOriginal
  208.         'SETCOLORSTYLE "'|| colorPGS.pcolor ||'" COLORNUMBER 0 FILL OBJECT OBJECTID '|| newOriginal
  209.         'SETCOLORTINT '|| prefs.startTint ||'% COLORNUMBER 0 FILL OBJECT OBJECTID '|| newOriginal
  210.     END
  211.  
  212.     DO k=0 TO prefs.num-1
  213.  
  214.         IF (BusyHandle("test", (idCount), objNr, (prefs.num-1), k) = 1)
  215.         THEN DO
  216.             Call CleanUp(busyReq)
  217.             EXIT
  218.         END
  219.  
  220.         currentStroke = startStroke + (endStroke - startStroke) * k / (prefs.num - 1)
  221.         currentTint   = prefs.startTint   + (prefs.endTint   - prefs.startTint)   * k / (prefs.num - 1)
  222.  
  223.         'DUPLICATE OFFSET "0" "0" OBJECTID '|| newOriginal
  224.         'GETOBJECT'
  225.          dupeId.k = RESULT
  226.  
  227.         IF (mode = 'TEXT')
  228.         THEN DO
  229.             'SELECTTEXT INOBJECT '|| dupeId.k
  230.             'SELECTTEXT ALL'
  231.             'BEGINCOMMANDCAPTURE'
  232.                 'FILLED OFF TEXT'
  233.                 'STROKED ON TEXT'
  234.                 'SETSTROKECOUNT 1 TEXT'
  235.                 'SETSTROKE SOLID STROKENUMBER 0 TEXT'
  236.                 'SETSTROKEWEIGHT '|| currentStroke||measure||' STROKENUMBER 0 TEXT'
  237.                 'SETCOLORCOUNT 1 STROKENUMBER 0 TEXT'
  238.                 'SETCOLORSTYLE "'|| colorPGS.pcolor ||'" COLORNUMBER 0 STROKENUMBER 0 TEXT'
  239.                 'SETCOLORTINT '|| currentTint ||'% COLORNUMBER 0 STROKENUMBER 0 TEXT'
  240.             'ENDCOMMANDCAPTURE'
  241.         END
  242.         ELSE DO
  243.             'FILLED OFF OBJECT OBJECTID '|| dupeId.k
  244.             'STROKED ON OBJECT OBJECTID '|| dupeId.k
  245.             'SETSTROKE SOLID STROKENUMBER 0 OBJECT OBJECTID '|| dupeId.k
  246.             'SETSTROKEWEIGHT '|| currentStroke||measure||' STROKENUMBER 0 OBJECT OBJECTID '|| dupeId.k
  247.             'SETCOLORSTYLE "'|| colorPGS.pcolor ||'" COLORNUMBER 0 STROKENUMBER 0 OBJECT OBJECTID '|| dupeId.k
  248.             'SETCOLORTINT '|| currentTint ||'% COLORNUMBER 0 STROKENUMBER 0 OBJECT OBJECTID '|| dupeId.k
  249.         END
  250.         'SENDTOBACK OBJECTID '|| dupeId.k
  251.     END
  252.     'SENDTOBACK'
  253.  
  254.     'SELECTOBJECT NONE'
  255.  
  256.     DO k=0 TO prefs.num-1
  257.         'SELECTOBJECT ADD OBJECTID '|| dupeId.k
  258.     END
  259.     'SELECTOBJECT ADD OBJECTID 'newOriginal
  260.  
  261.     'GROUP BEST'
  262.     'BRINGTOFRONT OBJECTID '|| original
  263.     'SELECTOBJECT ADD OBJECTID 'original
  264.     'GROUP BEST'
  265. Return
  266. /* /// */
  267.  
  268. /* ---------------------------------------------------------------- */
  269.  
  270. /* /// CleanUp()
  271. */
  272. CleanUp:
  273.     /*
  274.     ** Close busy requester, clean up and leave program
  275.     ** ------------------------------------------------
  276.     */
  277.  
  278.     IF (muiBusyWinOpen = TRUE)
  279.     THEN DO
  280.         Call BusyClose()
  281.     END
  282.  
  283.     /*
  284.     ** reveal the window
  285.     */
  286.     IF (prefs.hideWin = 1)
  287.     THEN 'REVEALWINDOW WINDOW "'winname'"'
  288.  
  289.     'REFRESH ON'
  290.     'REFRESHWINDOW'
  291. EXIT
  292. /* /// */
  293. /* /// CopyAsBox(copyID)
  294. */
  295. CopyAsBox:
  296.     /*
  297.     ** CopyAsBox
  298.     ** ---------
  299.     */
  300.  
  301.     PARSE ARG copyID
  302.  
  303.     'GETPICTURE POSITION copyPos OBJECTID '|| copyID
  304.  
  305.     'DRAWBOX '|| copyPos.left copyPos.top copyPos.right copyPos.bottom''
  306. Return
  307. /* /// */
  308. /* /// GUIGadgetPressed(which, what1, what2)
  309. */
  310. GUIGadgetPressed:
  311.     /*
  312.     ** Gadget reaction routine
  313.     ** -----------------------
  314.     */
  315.  
  316.     PARSE ARG which, what1, what2
  317.  
  318.     SELECT
  319.         WHEN (which = g_cancel)
  320.         THEN DO
  321.             Say 'User Canceled'
  322.             Call Cleanup(busyReq)
  323.         END
  324.  
  325.         WHEN (which = g_OK)
  326.         THEN DO
  327.             Say 'doing it...'
  328.             WriteLN(ca, ' CLOSE ')
  329.             Call Close(ca)
  330.             Call DoFuzzyShadows
  331.             Call CleanUp
  332.             EXIT
  333.         END
  334.  
  335.         OTHERWISE
  336.         NOP
  337.     END
  338. Return
  339. /* /// */
  340. /* /// OpenBusy2(title, total)
  341. */
  342. OpenBusy2:
  343.     /*
  344.     ** Open the busy requester
  345.     ** -----------------------
  346.     */
  347.  
  348.     PARSE ARG title,total
  349.     'OPENBUSYREQUESTER DELAYEDOPEN ENABLED MESSAGE "'title'" THERMOMETER ENABLED ABORT ENABLED TOTAL 'total' CURRENT 0'
  350.     ret = RESULT
  351. Return ret
  352. /* /// */
  353.  
  354. /* /// BuildGUI()
  355. */
  356. BuildGUI:
  357.  
  358.     /*
  359.     ** Create the rxMUI GUI
  360.     ** --------------------
  361.     */
  362.  
  363.     /*
  364.     ** first of all the let's define the application object
  365.     */
  366.     
  367.     muiApp.Title       = pgsName
  368.     muiApp.Version     = "$VER: "|| pgsVersion ||' ('|| pgsDate ||')'
  369.     muiApp.Copyright   = pgsCopy
  370.     muiApp.Author      = pgsAuthor
  371.     muiApp.Description = "Create so called fuzzy shadows"
  372.     muiApp.Base        = pgsName
  373.     muiApp.diskobject  = pgsName
  374.     muiApp.ctrlc       = 1
  375.     muiApp.menustrip   = "muiMenuStrip"
  376.     muiApp.subwindow   = "muiWin"
  377.  
  378.     /*
  379.     ** let's define the window
  380.     */
  381.     muiWin.ID       = "MAIN"
  382.     muiWin.Title    = pgsName pgsVersion ||' ('|| pgsDate ||') - '|| pgsCopy
  383.     muiWin.Contents = "muiMainGroup"
  384.  
  385.  
  386.     /*
  387.     ** define the menu
  388.     */
  389.     muiMenuStrip.0 = "muiMenuProject"
  390.         muiMenuProject.Title = "Project"
  391.         muiMenuProject.Class = "MENU"
  392.         muiMenuProject.0 = MenuItem("muiMenuAbout",     "About...",      "?")
  393.         muiMenuProject.1 = MenuItem("muiMenuAboutrxMUI","About RxMUI..."    )
  394.         muiMenuProject.2 = MenuItem("muiMenuAboutMUI",  "About MUI..."      )
  395.         muiMenuProject.3 = MenuItem("",                 "BAR"               )
  396.         muiMenuProject.4 = MenuItem("muiMenuQuit",      "Quit",          "Q")
  397.     muiMenuStrip.1 = "muiMenuPrefs"
  398.         muiMenuPrefs.Title = "Prefs"
  399.         muiMenuPrefs.Class = "MENU"
  400.         muiMenuPrefs.0 = MenuItem("muiMenuPrefsMUI",    "MUI...",        "M")
  401.         muiMenuPrefs.1 = MenuItem("",                    "BAR")
  402.         muiMenuPrefs.2 = MenuItem("muiMenuLoad",        "Load",            "L")
  403.         muiMenuPrefs.3 = MenuItem("muiMenuSave",        "Save",            "S")
  404.         muiMenuPrefs.4 = MenuItem("muiMenuSaveAs",        "Save As...",    "A")
  405.     res = NewObj("MENUSTRIP", "muiMenuStrip")
  406.     IF (res ~= 0)
  407.     THEN Call Err(res)
  408.  
  409.     /*
  410.     ** let's define the window contents
  411.     */
  412.  
  413.     tab = 0
  414.  
  415.     muiMainGroup.tab            = "muiGroup00"; tab = tab + 1
  416.         muiGroup00.Class        = "GROUP"
  417.         muiGroup00.Horiz        = 1
  418.         muiGroup00.Frame        = "GROUP"
  419.         muiGroup00.Background    = "FILLBACK"
  420.         muiGroup00.0            = HSpace()
  421.         muiGroup00.1            = "muiBITMAP"
  422.             muiBITMAP.Class            = "BITMAP"
  423.             muiBITMAP.Precision        = "ICON"
  424.             muiBITMAP.File            = pgsPic
  425.             muiBITMAP.InputMode        = "RelVerify"
  426.             muiBITMAP.Frame            = "BUTTON"
  427.         muiGroup00.2            = Label(ParseText('%c%b%8'|| pgsName pgsVersion ||'%n\n'|| pgsCopy))
  428.         muiGroup00.3            = HSpace()
  429.     muiMainGroup.tab            = "muiGroup0"; tab = tab + 1
  430.         muiGroup0.Class                = "GROUP"
  431.         muiGroup0.Frame                = "GROUP"
  432.         muiGroup0.Horiz                = 1
  433.         muiGroup0.HorizSpacing         = 1
  434.         muiGroup0.0                    = Label("Number of steps: ")
  435.         muiGroup0.1                    = "g_num"
  436.             g_num.Class                 = "SLIDER"
  437.             g_num.Min                      = 1
  438.             g_num.Max                   = 100
  439.             g_num.Value                 = 0
  440.         muiGroup0.2                    = HSpace(5)
  441.         muiGroup0.3                    = Label("Color to use: ")
  442.         muiGroup0.4                    = "g_color"
  443.             chooserLabels = ''
  444.             DO k = 0 TO colorCount-1
  445.                 chooserLabels = chooserLabels || '|' || colorPGS.k
  446.             END
  447.             chooserLabels = SubStr(chooserLabels, 2)
  448.             g_color.Class                = "CYCLE"
  449.             g_color.ControlChar            = "c"
  450.             g_color.Entries                = chooserLabels
  451.             g_color.Horiz                = 1
  452.             g_color.Selected            = 0
  453.  
  454.     muiMainGroup.tab            = "muiGroup1"; tab = tab + 1
  455.         muiGroup1.class               = "GROUP"
  456.         muiGroup1.columns             = 6
  457.         muiGroup1.0                    = HSpace(1)
  458.         muiGroup1.1                    = VSpace()
  459.         muiGroup1.2                    = HSpace(1)
  460.         muiGroup1.3                    = VSpace()
  461.         muiGroup1.4                    = HSpace(1)
  462.         muiGroup1.5                    = VSpace()
  463.         muiGroup1.6                    = Label("Stroke start:")
  464.         muiGroup1.7                    = String("g_startStroke")
  465.         muiGroup1.8                    = Label("Tint start: %")
  466.         muiGroup1.9                    = String("g_startTint")
  467.         muiGroup1.10                = Label("Shadow offset X:")
  468.         muiGroup1.11                = String("g_offsetX")
  469.         muiGroup1.12                = Label("Stroke end:")
  470.         muiGroup1.13                = String("g_endStroke")
  471.         muiGroup1.14                = Label("Tint end: %")
  472.         muiGroup1.15                = String("g_endTint")
  473.         muiGroup1.16                = Label("Shadow offset Y:")
  474.         muiGroup1.17                = String("g_offsetY")
  475.  
  476.     muiMainGroup.tab            = VSpace(); tab = tab + 1
  477.     muiMainGroup.tab             = "muiGroup21"; tab = tab + 1
  478.         muiGroup21.Class            = "GROUP"
  479.         muiGroup21.Frame            = "GROUP"
  480.         muiGroup21.Columns            = 3
  481.         muiGroup21.0                = HSpace()
  482.         muiGroup21.1                = "muiGroupBox"
  483.             muiGroupBox.Class            = "GROUP"
  484.             muiGroupBox.Columns            = 2
  485.             muiGroupBox.0               = CheckMark("g_box", 0)
  486.             muiGroupBox.1                = Label("treat pictures as box", "LEFT")
  487.             muiGroupBox.2                  = CheckMark("g_hideWin", 0)
  488.             muiGroupBox.3                = Label("hide window", "LEFT")
  489.         muiGroup21.2                = HSpace()
  490.     muiMainGroup.tab             = VSpace(); tab = tab + 1
  491.     muiMainGroup.tab             = "muiButtonGroup"; tab = tab + 1
  492.         muiButtonGroup.class        = "GROUP"
  493.         muiButtonGroup.columns        = 2
  494.         muiButtonGroup.0            = Button("G_OK",     "_Ok"    )
  495.         muiButtonGroup.1            = Button("G_CANCEL", "_Cancel")
  496.  
  497.     /*
  498.     ** create all
  499.     */
  500.     Call NewObj("APPLICATION","muiApp")
  501.  
  502.     /*
  503.     ** window close gadget means quit...
  504.     */
  505.     Call Notify("muiWin", "CLOSEREQUEST", 1, "muiApp", "RETURNID", "QUIT")
  506.  
  507.     /*
  508.     ** Ok and Cancel Buttons...
  509.     */
  510.     Call Notify("G_CANCEL", "PRESSED", 0, "muiApp", "RETURNID")
  511.     Call Notify("G_OK",     "PRESSED", 0, "muiApp", "RETURNID")
  512.  
  513.     /*
  514.     ** Menu events...
  515.     */
  516.     Call Notify("muiMenuLoad",      "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  517.     Call Notify("muiMenuSave",      "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  518.     Call Notify("muiMenuSaveAs",    "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  519.     Call Notify("muiMenuPrefsMUI",    "MENUTRIGGER", "EVERYTIME", "muiApp", "OpenConfigWindow")
  520.     Call Notify("muiMenuAbout",     "MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUT",      "muiWin")
  521.     Call Notify("muiMenuAboutrxMUI","MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUTRXMUI", "muiWin")
  522.     Call Notify("muiMenuAboutMUI",  "MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUTMUI",   "muiWin")
  523.     Call Notify("muiMenuQuit",      "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  524.  
  525.     /*
  526.     ** Button click -> about
  527.     */
  528.     Call Notify("muiBitmap", "PRESSED", 0, "muiApp", "ABOUT", "muiWin")
  529.  
  530.     /*
  531.     ** cycle chains...
  532.     */
  533.     Set("g_num",         "CYCLECHAIN", 1)
  534.     Set("g_color",       "CYCLECHAIN", 1)
  535.     Set("g_startStroke", "CYCLECHAIN", 1)
  536.     Set("g_startTint",   "CYCLECHAIN", 1)
  537.     Set("g_offsetX",     "CYCLECHAIN", 1)
  538.     Set("g_endStroke",   "CYCLECHAIN", 1)
  539.     Set("g_endTint",     "CYCLECHAIN", 1)
  540.     Set("g_offsetY",     "CYCLECHAIN", 1)
  541.     Set("g_box",         "CYCLECHAIN", 1)
  542.     Set("g_hideWin",     "CYCLECHAIN", 1)
  543.     Set("g_ok",          "CYCLECHAIN", 1)
  544.     Set("g_cancel",      "CYCLECHAIN", 1)
  545.  
  546.  
  547.     /*
  548.     ** Set active gadget at start
  549.     */
  550.     Call Set("muiWin", "ActiveObject", "G_OK")
  551.  
  552. Return
  553. /* /// */
  554. /* /// CheckPrefsVersion(fileName)
  555. */
  556. CheckPrefsVersion:
  557.     /*
  558.     ** Check if prefsfile is compatible
  559.     ** --------------------------------
  560.     */
  561.  
  562.     PARSE ARG fileName
  563.  
  564.     IF (fileName = "")
  565.     THEN fileName = standardPrefs
  566.  
  567.     ok = Open('Prefs', fileName, 'R')
  568.     IF (ok = 1)
  569.     THEN DO
  570.         dummy = ReadLn('Prefs')
  571.         cl = Close('Prefs')
  572.  
  573.         IF ( (Left(dummy, Length(pgsName)) = pgsName) | (Left(dummy, 3) = 'FSP') ) & (Right(dummy,4) >= pgsLVer)
  574.         THEN Return 0
  575.     END
  576. RETURN 1
  577. /* /// */
  578. /* /// CheckRoutines()
  579. */
  580. CheckRoutines:
  581.  
  582.     /*
  583.     ** first check if one or more objects are selected
  584.     */
  585.  
  586.     'GETSELECTEDOBJECTS IDLIST allObjs'
  587.      idCount = RESULT
  588.  
  589.     /*
  590.     ** no object selected? -> error
  591.     */
  592.  
  593.     IF (RC > 0)
  594.     THEN DO
  595.         Call ShowRequester('Select one or more objects first!', 'I will!')
  596.         EXIT
  597.     END
  598.  
  599.     /*
  600.     ** get page and window names
  601.     */
  602.  
  603.     'CURRENTPAGE'
  604.      page = RESULT
  605.  
  606.     'CURRENTWINDOWPATH'
  607.      winname = RESULT
  608.  
  609.     /*
  610.     ** get colors
  611.     */
  612.  
  613.     'GETCOLORS colorPGS'
  614.     colorCount = RESULT
  615. Return
  616. /* /// */
  617. /* /// err(res)
  618. */
  619. err:
  620.     PARSE ARG res
  621.  
  622.     ADDRESS 'PAGESTREAM'
  623.     'LOCKINTERFACE FALSE'
  624.     'REFRESH ON'
  625.     'REFRESHWINDOW WINDOW "'|| oldWinName ||'"'
  626.     ''defmeasure''
  627.     Call pgsRequester(GetRXmuiString(res) "in line" sigl-1)
  628. Exit
  629. /* /// */
  630. /* /// EventLoop()
  631. */
  632. EventLoop:
  633.     /*
  634.     ** this is the standard cycle to handle an application
  635.     */
  636.     ctrl_C = 2**12
  637.     s = 0
  638.     DO FOREVER
  639.         Call Handle("muiApp", "H", s)
  640.         DO i = 0 TO (H.num - 1)
  641.             id = H.i
  642.             SELECT
  643.                 WHEN (id = "QUIT") | (id = "G_CANCEL")
  644.                 THEN Call CleanUp
  645.                 WHEN (id = "MUIMENULOAD")
  646.                 THEN DO
  647.                     Call LoadPrefsAs()
  648.                     Call PrefsWindowSet()
  649.                 END
  650.                 WHEN (id = "MUIMENUSAVE")
  651.                 THEN DO
  652.                     Call PrefsWindowGet()
  653.                     Call SavePrefs()
  654.                 END
  655.                 WHEN (id = "MUIMENUSAVEAS")
  656.                 THEN DO
  657.                     Call PrefsWindowGet()
  658.                     Call SavePrefsAs()
  659.                 END
  660.                 WHEN (id = "MUIMENUQUIT")
  661.                 THEN DO
  662.                     IF (ShowRequester('Really Quit?', 'No|Yes') = 0)
  663.                     THEN Call CleanUp
  664.                 END
  665.                 WHEN (id = "G_OK")
  666.                 THEN Return
  667.  
  668.                 OTHERWISE Say h.i
  669.             END
  670.         END
  671.         s = Wait( OR(h.signals, ctrl_C) )
  672.         IF (AND(s, ctrl_C) ~= 0)
  673.         THEN EXIT
  674.     END
  675. EXIT
  676. /* /// */
  677. /* /// GetFileName(prefName)
  678. */
  679. GetFileName:
  680.     PARSE ARG fileName,text
  681.     file = FilePart(fileName)
  682.     path = PathPart(fileName)
  683.  
  684.     'GETFILE TITLE "'|| text ||'" PATH "'|| path ||'" FILE "'|| file ||'"'
  685.     IF (RC = 0)
  686.     THEN fileName = RESULT
  687.     ELSE fileName = 0
  688. Return fileName
  689. /* /// */
  690. /* /// Halt
  691. */
  692. Halt:
  693. BREAK_C:
  694.     EXIT
  695. /* /// */
  696. /* /// LoadPrefs(fileName)
  697. */
  698. LoadPrefs:
  699.     /*
  700.     ** load the preferences file
  701.     ** -------------------------
  702.     */
  703.  
  704.     PARSE ARG fileName
  705.     IF (fileName = "")
  706.     THEN fileName = standardPrefs
  707.  
  708.     say 'loading 'fileName' ...'
  709.  
  710.     /*
  711.     ** Check the version of the prefs file
  712.     */
  713.  
  714.     IF (CheckPrefsVersion(fileName) ~= 0)
  715.     THEN DO
  716.         Call ShowRequester('Prefsfile not found or not valid! Using defaults.', 'Hmm...')
  717.         Return
  718.     END
  719.     ELSE DO
  720.         Call Open('Prefs', fileName, 'R')
  721.         Say 'Reading prefs file...'
  722.         dummy = ReadLN('Prefs')
  723.         DO xx = 1 to 100
  724.             command = ReadLn('Prefs')
  725.             INTERPRET command
  726.             IF EOF('Prefs') THEN LEAVE
  727.         END
  728.         Call Close('Prefs')
  729.     END
  730. RETURN
  731. /* /// */
  732. /* /// LoadPrefsAs()
  733. */
  734. LoadPrefsAs:
  735.     /*
  736.     ** Load Prefs with selectable name
  737.     ** -------------------------------
  738.     */
  739.  
  740.     prefName = GetFileName(currentPrefs, 'Load Preferences...')
  741.     IF (prefName ~= 0)
  742.     THEN DO
  743.         currentPrefs = prefName
  744.         Call LoadPrefs(currentPrefs)
  745.     END
  746. Return
  747. /* /// */
  748. /* /// pgsRequester(text)
  749. */
  750. pgsRequester:
  751.     PARSE ARG meldung
  752.  
  753.     /*
  754.     ** Convert to multiple lines
  755.     */
  756.  
  757.     _num       = 1
  758.     mLines.num = _num
  759.     mLines.0   = meldung
  760.  
  761.     DO FOREVER
  762.         _prev = _num-1
  763.         pos = Index(mLines._prev, '|')
  764.         IF (pos = 0)
  765.         THEN LEAVE
  766.  
  767.         mLines._num  = SubStr(mLines._prev, pos+1)
  768.         mLines._prev = Left(mLines._prev, pos-1)
  769.         _num = _num + 1
  770.     END
  771.     mLines.num = _num
  772.  
  773.     l = 0
  774.     DO kk = 0 TO mLines.num - 1
  775.         IF (l < Length(mLines.kk) * 8)
  776.         THEN l = Length(mLines.kk) * 8
  777.         Say mLines.kk
  778.     END
  779.  
  780.     ADDRESS "PAGESTREAM"
  781.     'ALLOCAREXXREQUESTER "error inside '|| pgsName ||'" '|| (l+20) (40 + mLines.num * 10)
  782.      reqhandle = RESULT
  783.  
  784.     'ADDAREXXGADGET '|| reqhandle ||' EXIT '|| (l/2 - 25) (20 + mLines.num * 10) ||' 50 LABEL "_Ok"'
  785.      dummy = RESULT
  786.  
  787.     DO kk = 0 TO mLines.num - 1
  788.         'ADDAREXXGADGET 'reqhandle' TEXT 10 ' (10 + kk*10) l 'STRING "'mLines.kk'"'
  789.     END
  790.  
  791.     'DOAREXXREQUESTER 'reqhandle
  792.      dummy = RESULT
  793.  
  794.     'FREEAREXXREQUESTER 'reqhandle
  795. RETURN
  796. /* /// */
  797. /* /// PrefsWindowGet()
  798. */
  799. PrefsWindowGet:
  800.     Call GetAttr("g_num",         "VALUE",    "prefs.num")
  801.     Call GetAttr("g_color",       "ACTIVE",   "prefs.color")
  802.     Call GetAttr("g_startStroke", "CONTENTS", "prefs._startStroke")
  803.     Call GetAttr("g_endStroke",   "CONTENTS", "prefs._endStroke")
  804.     Call GetAttr("g_startTint",   "CONTENTS", "prefs.startTint")
  805.     Call GetAttr("g_endTint",     "CONTENTS", "prefs.endTint")
  806.     Call GetAttr("g_offsetX",     "CONTENTS", "prefs._offX")
  807.     Call GetAttr("g_offsetY",     "CONTENTS", "prefs._offY")
  808.     Call GetAttr("g_box",         "SELECTED", "prefs.doPicAsBox")
  809.     Call GetAttr("g_hideWin",     "SELECTED", "prefs.hideWin")
  810. Return
  811. /* /// */
  812. /* /// PrefsWindowSet()
  813. */
  814. PrefsWindowSet:
  815.     Call Set("g_num",         "VALUE",    prefs.num)
  816.     Call Set("g_color",       "ACTIVE",   prefs.color)
  817.     Call Set("g_startStroke", "CONTENTS", prefs._startStroke)
  818.     Call Set("g_endStroke",   "CONTENTS", prefs._endStroke)
  819.     Call Set("g_startTint",   "CONTENTS", prefs.startTint)
  820.     Call Set("g_endTint",     "CONTENTS", prefs.endTint)
  821.     Call Set("g_offsetX",     "CONTENTS", prefs._offX)
  822.     Call Set("g_offsetY",     "CONTENTS", prefs._offY)
  823.     Call Set("g_box",         "SELECTED", prefs.doPicAsBox)
  824.     Call Set("g_hideWin",     "SELECTED", prefs.hideWin)
  825. Return
  826. /* /// */
  827. /* /// SavePrefs(fileName)
  828. */
  829. SavePrefs:
  830.     /*
  831.     ** save the preferences file
  832.     ** -------------------------
  833.     */
  834.  
  835.     PARSE ARG filename
  836.     IF (fileName = "")
  837.     THEN fileName = standardPrefs
  838.  
  839.     say 'saving 'fileName' ...'
  840.  
  841.     okOpen = Open('Prefs', fileName, 'W')
  842.     IF (okOpen = 1)
  843.     THEN DO
  844. OPTIONS FAILAT 11
  845.         Say 'writing prefs "'|| fileName ||'"...'
  846.         WriteLN('Prefs', pgsName pgsVersion)
  847.  
  848.         Call WritePrefsNameValue('Prefs', 'prefs.num')
  849.         Call WritePrefsNameValue('Prefs', 'prefs._startStroke')
  850.         Call WritePrefsNameValue('Prefs', 'prefs._endStroke')
  851.         Call WritePrefsNameValue('Prefs', 'prefs.startTint')
  852.         Call WritePrefsNameValue('Prefs', 'prefs.endTint')
  853.         Call WritePrefsNameValue('Prefs', 'prefs.doPicAsBox')
  854.         Call WritePrefsNameValue('Prefs', 'prefs.color')
  855.         Call WritePrefsNameValue('Prefs', 'prefs._offX')
  856.         Call WritePrefsNameValue('Prefs', 'prefs._offY')
  857.         Call WritePrefsNameValue('Prefs', 'prefs.hideWin')
  858.  
  859.         WriteLN('Prefs', '/* END OF Prefsfile for '|| pgsName pgsVersion ||' ('|| pgsDate ||') */')
  860. OPTIONS FAILAT 10
  861.         Call Close('Prefs')
  862.     END
  863.     ELSE DO
  864.         Say 'Error writing prefs file "'|| fileName ||'"'
  865.         Call ShowRequester('ERROR writing prefs file '|| fileName, 'Damn!')
  866.     END
  867. RETURN
  868. /* /// */
  869. /* /// SavePrefsAs()
  870. */
  871. SavePrefsAs:
  872.     /*
  873.     ** Save Prefs with selectable name
  874.     ** -------------------------------
  875.     */
  876.  
  877.     prefName = GetFileName(currentPrefs, 'Save Preferences As...')
  878.     IF (prefName ~= 0)
  879.     THEN DO
  880.         currentPrefs = prefName
  881.         Call SavePrefs(currentPrefs)
  882.     END
  883. Return
  884. /* /// */
  885. /* /// SetDefaultPrefs()
  886. */
  887. SetDefaultPrefs:
  888.  
  889.     /*
  890.     ** defaults needed in the program
  891.     */
  892.  
  893.     measure = 'pt'
  894.     tf.0 = 'FALSE'
  895.     tf.1 = 'TRUE'
  896.     Progress = 0
  897.     currentPrefs = standardPrefs
  898.  
  899.     prefs.num          = 5
  900.     prefs._startStroke = '1pt'
  901.     prefs._endStroke   = '5pt'
  902.     prefs.startTint    = 50
  903.     prefs.endTint      = 10
  904.     prefs.doPicAsBox   = 0
  905.     prefs.color        = 0
  906.     prefs._offX        = '1cm'
  907.     prefs._offY        = '1cm'
  908.     prefs.hideWin      = 0
  909. Return
  910. /* /// */
  911. /* /// ShowRequester(question, knobs)
  912. */
  913. ShowRequester:
  914.     /*
  915.     ** Show requester with some gadgets
  916.     ** --------------------------------
  917.     */
  918.     PARSE ARG question,knobs
  919.     Say question
  920.     reqData = EasyRequest(question, pgsNAme, knobs)
  921.     say reqData
  922. Return reqData
  923. /* /// */
  924. /* /// WritePrefsNameValue(file, name)
  925. */
  926. WritePrefsNameValue:
  927.     /*
  928.     ** write parameter with value in file
  929.     ** ----------------------------------
  930.     */
  931.  
  932.     PARSE ARG file,name
  933.  
  934.     Interpret "saveSTR = '"|| name ||" = ""'"|| name ||"'""'"
  935.     WriteLN(file, saveSTR)
  936. Return
  937. /* /// */
  938.  
  939. /* /// BusyClose()
  940. */
  941. BusyClose:
  942.     IF (muiBusyWinOpen = TRUE)
  943.     THEN DO
  944.         Call GetAttr("muiBusyWin", "OPEN", "o")
  945.         IF (o ~= 0)
  946.         THEN Call Set("muiBusyWin", "OPEN", 0)
  947.         Call Dispose("muiBusyWin")
  948.         muiBusyWinOpen = FALSE
  949.     END
  950. Return
  951. /* /// */
  952. /* /// BusyHandle(text, currentOBJ, currentNUM)
  953. */
  954. BusyHandle:
  955.     /*
  956.     ** Open the MUI busy requester
  957.     */
  958.     PARSE ARG text,maxOBJ,currentOBJ,maxNUM,currentNUM
  959.  
  960.     Set("muiBusyGaugeOBJ", "CURRENT", currentOBJ)
  961.     Set("muiBusyGaugeOBJ", "INFOTEXT", Trunc(100*currentOBJ/maxOBJ) ||"%")
  962.     Set("muiBusyGaugeNUM", "CURRENT", currentNUM)
  963.     Set("muiBusyGaugeNUM", "INFOTEXT", Trunc(100*currentNUM/maxNUM) ||"%")
  964.  
  965.     /*
  966.     ** this is the standard cycle to handle an application
  967.     */
  968.     ctrl_C = 2**12
  969.     s = 0
  970.     Call Handle("muiApp", "H", s)
  971.     DO i = 0 TO (H.num - 1)
  972.         id = H.i
  973.         SELECT
  974.             WHEN (id = "BUSY_CANCEL")
  975.             THEN DO
  976.                 userCancel = 1
  977.             END
  978.         END
  979.     END
  980.     s = Wait( OR(h.signals, ctrl_C) )
  981.     IF (AND(s, ctrl_C) ~= 0)
  982.     THEN EXIT
  983. Return userCancel
  984. /* /// */
  985. /* /// BusyOpen(title, totalOBJ, totalNUM)
  986. */
  987. BusyOpen:
  988.     /*
  989.     ** Open the MUI busy requester
  990.     */
  991.     userCancel = 0
  992.     PARSE ARG title,totalOBJ,totalNUM
  993.  
  994.     /*
  995.     ** let's define the window
  996.     */
  997.     
  998.     muiBusyWin.ID         = "BUSY"
  999.     muiBusyWin.Title      = pgsName
  1000.     muiBusyWin.Contents   = "muiBusyGroup"
  1001.  
  1002.     /*
  1003.     ** let's define the window contents
  1004.     */
  1005.     muiBusyGroup.0 = "muiBusyGroup0"
  1006.         muiBusyGroup0.Class = "GROUP"
  1007.         muiBusyGroup0.Frame = "GROUP"
  1008.         muiBusyGroup0.Horiz = 0
  1009.         muiBusyGroup0.0     = Label(title, "CENTERED")
  1010.         muiBusyGroup0.1     = "muiBusyGaugeNUM"
  1011.             muiBusyGaugeNUM.Class     = "GAUGE"
  1012.             muiBusyGaugeNUM.Frame     = "GAUGE"
  1013.             muiBusyGaugeNUM.Horiz     = 1
  1014.             muiBusyGaugeNUM.InfoText  = ""
  1015.             muiBusyGaugeNUM.Max       = totalNUM
  1016.             muiBusyGaugeNUM.Current   = 0
  1017.             muiBusyGaugeNUM.FIXHEIGHTTXT = 1
  1018.         muiBusyGroup0.2     = "muiBusyGaugeOBJ"
  1019.             muiBusyGaugeOBJ.Class     = "GAUGE"
  1020.             muiBusyGaugeOBJ.Frame     = "GAUGE"
  1021.             muiBusyGaugeOBJ.Horiz     = 1
  1022.             muiBusyGaugeOBJ.InfoText  = ""
  1023.             muiBusyGaugeOBJ.Max       = totalOBJ
  1024.             muiBusyGaugeOBJ.Current   = 0
  1025.             muiBusyGaugeOBJ.FIXHEIGHTTXT = 1
  1026.         muiBusyGroup0.3     = VSpace()
  1027.         muiBusyGroup0.4     = Button("BUSY_CANCEL", "_Cancel")
  1028.  
  1029.     /*
  1030.     ** Busy Cancel Button...
  1031.     */
  1032.     Call Notify("BUSY_CANCEL", "PRESSED", 0, "muiApp", "SETVAR", "userCancel")
  1033.  
  1034.     /*
  1035.     ** generate new window object
  1036.     */
  1037.     res = NewObj("WINDOW","muiBusyWin",,1)
  1038.     IF (res ~= 0)
  1039.     THEN Call err(res)
  1040.     muiBusyWinOpen = TRUE
  1041.  
  1042.     /*
  1043.     ** Set active gadget at start
  1044.     */
  1045.     Call Set("muiBusyWin", "ActiveObject", "BUSY_CANCEL")
  1046.  
  1047.     /*
  1048.     ** Add window to application
  1049.     */
  1050.     Call Add("muiApp", "muiBusyWin")
  1051.  
  1052.     Call Set("muiBusyWin", "OPEN", 1)
  1053.     Call GetAttr("muiBusyWin", "OPEN", "o")
  1054.     IF (o = 0)
  1055.     THEN DO
  1056.         Say "can't open busy window!"
  1057.         Call ErrorRequester("Can't open busy window! -> Exiting", "Sorry...")
  1058.         Call CleanUp
  1059.     END
  1060. Return 1
  1061. /* /// */
  1062.  
  1063. /* /// ON SYNTAX
  1064. */
  1065. SYNTAX:
  1066.     f = rc
  1067.     str =               "*-------------------------------------------*"
  1068.     str = str || '|' || "* Syntax Error in line "|| sigl
  1069.     str = str || '|' || "* "|| f ||":" ErrorText(f)
  1070.     str = str || '|' || "*-------------------------------------------*"
  1071.  
  1072.     /*
  1073.     ** Unlock PageStream and QUIT
  1074.     */
  1075.     ADDRESS 'PAGESTREAM'
  1076.     'LOCKINTERFACE FALSE'
  1077.     'REFRESH ON'
  1078.     'REFRESHWINDOW WINDOW "'|| oldWinName ||'"'
  1079.     ''defmeasure''
  1080.  
  1081.     Call pgsRequester(str)
  1082.  
  1083.     IF (f = 15)
  1084.     THEN DO
  1085.         Call pgsRequester('You should consider to register rxMUI.|Looks like the trial time is over.')
  1086.     END
  1087.  
  1088. EXIT
  1089. /* /// */
  1090.  
  1091.